import userModel from '../models/userModel.js';

// add to user cart
/**
 * 异步函数，用于将指定商品添加到用户购物车中
 * @param {Object} req - 请求对象，包含用户ID和商品ID
 * @param {Object} res - 响应对象，用于发送响应给客户端
 */
const addToCart = async (req, res) => {
  try {
    // 根据用户ID查询用户信息
    let userData = await userModel.findOne({ _id: req.body.userId });
    // 获取用户的购物车数据
    let cartData = await userData.cartData;

    // 检查购物车中是否已存在该商品
    if (!cartData[req.body.itemId]) {
      // 如果不存在，则将该商品添加到购物车中，并设置数量为1
      cartData[req.body.itemId] = 1;
    } else {
      // 如果已存在，则将该商品的数量增加1
      cartData[req.body.itemId] += 1;
    }

    // 更新用户数据库中的购物车数据
    await userModel.findByIdAndUpdate(req.body.userId, { cartData });

    // 向客户端发送成功响应
    res.json({ success: true, message: 'Added To Cart' });
  } catch (error) {
    // 捕获异常，并在控制台中输出错误信息
    console.log(error);
    // 向客户端发送错误响应
    res.json({ success: false, message: 'Error' });
  }
};


// remove food from user cart
/**
 * 异步函数 removeFromCart 用于处理从购物车中移除商品的请求
 * @param {Object} req - 请求对象，包含用户ID和商品ID
 * @param {Object} res - 响应对象，用于发送响应给客户端
 */
const removeFromCart = async (req, res) => {
  try {
    // 根据用户ID查找用户数据
    let userData = await userModel.findById(req.body.userId);
    // 获取用户的购物车数据
    let cartData = await userData.cartData;
    // 检查购物车中指定商品的数量，如果大于0，则减少1
    if (cartData[req.body.itemId] > 0) {
      cartData[req.body.itemId] -= 1;
    }
    // 更新用户数据中的购物车信息
    await userModel.findByIdAndUpdate(req.body.userId, { cartData });
    // 返回成功消息
    res.json({ success: true, message: 'Removed From Cart' });
  } catch (error) {
    // 捕获并打印错误，返回错误消息
    console.log(error);
    res.json({ success: false, message: 'Error' });
  }
};


/**
 * 异步获取用户购物车信息
 * @param {Object} req - 请求对象，包含用户ID信息
 * @param {Object} res - 响应对象，用于发送响应数据
 */
const getCart = async (req, res) => {
  try {
    // 根据请求体中的用户ID查找用户信息
    let userData = await userModel.findById(req.body.userId);
    // 获取用户的购物车数据
    let cartData = await userData.cartData;
    // 返回成功响应，包含购物车数据
    res.json({ success: true, cartData: cartData });
  } catch (error) {
    // 捕获异常并打印错误信息
    console.log(error);
    // 返回错误响应
    res.json({ success: false, message: 'Error' });
  }
};


export { addToCart, removeFromCart, getCart };
